﻿Imports System.Globalization

Namespace Models

    Public Interface IMatricula
        Function IsPeriodoMatricula() As Boolean

        Function GetInfoPeriodoMatricula() As PERIODOS_MATRICULA

        Function GetNamesEspecialidades() As IEnumerable(Of SelectListItem)

        Function IsExistNIE(NIE As String) As Boolean

        Function Insert_SolicitudAlumno(Alumno As ViewModels.MatriculaModel) As Decimal

        Function GetInfoSolicitud(NIE As String) As MATRICULA_SOLICITUDES
    End Interface

    Partial Public Class SchoolClickDB_Repositorio
        Implements IMatricula

        Public ReadOnly Property IMatricula() As IMatricula
            Get
                Return DirectCast(Me, IMatricula)
            End Get
        End Property

        Private Function IsPeriodoMatricula() As Boolean Implements IMatricula.IsPeriodoMatricula
            Try
                Using cnn As New SchoolClick_Guest_ConnectionString
                    Dim res = cnn.MATRICULA_IS_PERIODO_ACTIVO.SingleOrDefault
                    If res IsNot Nothing Then Return res
                End Using
            Catch ex As Exception
                ex.Data.Clear()
            End Try

            Return False
        End Function

        Private Function GetInfoPeriodoMatricula() As PERIODOS_MATRICULA Implements IMatricula.GetInfoPeriodoMatricula
            Try
                Using cnn As New SchoolClick_Guest_ConnectionString
                    Dim iAnio = Date.Now.AddYears(1).Year
                    Dim _info = cnn.PERIODOS_MATRICULA.Where(Function(pm) pm.ANIO_MATRICULA = iAnio).SingleOrDefault
                    Return _info
                End Using
            Catch ex As Exception
                ex.Data.Clear()
            End Try
            Return Nothing
        End Function

        Private Function GetNamesEspecialidades() As IEnumerable(Of SelectListItem) Implements IMatricula.GetNamesEspecialidades
            Dim _items As New List(Of SelectListItem)
            _items.Add(New SelectListItem With {.Text = "General", .Value = "General"})
            _items.Add(New SelectListItem With {.Text = "Ciencias Economicas", .Value = "Ciencias Economicas"})
            Try
                'Dim iAnio = Date.Now.AddYears(1).Year

                'Por el momento dejaremos automatico sin hacer la solictiud a la base de datos para matricula de nuevo ingreso
                'Using cnn As New SchoolClick_Guest_ConnectionString
                'End Using
            Catch ex As Exception
                ex.Data.Clear()
            End Try
            Return _items.AsEnumerable
        End Function

        Private Function IsExistNIE(NIE As String) As Boolean Implements IMatricula.IsExistNIE
            Try
                Using cnn As New SchoolClickEntities
                    Dim Año As String = Date.Now.AddYears(1).Year
                    Dim iCount = cnn.MATRICULA_SOLICITUDES.Where(Function(m) m.NIE = NIE And m.PMATRICULA_SOLICITUD = Año).Count
                    Return IIf(iCount = 0, True, False)
                End Using
            Catch ex As Exception
                Throw New ApplicationException(String.Format("No se ha podido determinar si el NIE ingresado es repetido o no, ya que el servidor no ha respondido. Por favor, intentelo mas tarde"), ex)
            End Try
        End Function

        Private Function Insert_SolicitudAlumno(Alumno As ViewModels.MatriculaModel) As Decimal Implements IMatricula.Insert_SolicitudAlumno
            Try
                Using cnn As New SchoolClickEntities
                    Dim var = cnn.MATRICULA_INSERT_SOLICITUD(Alumno.frm_grado, Alumno.frm_especialidad, Alumno.frm_NIE, Alumno.frm_Nombres, Alumno.frm_Apellidos,
                                                             Alumno.frm_Genero, Alumno.frm_DUI, Alumno.frm_Pais, Date.Parse(Alumno.frm_FNacimiento, CultureInfo.GetCultureInfo("es-SV")),
                                                             Alumno.frm_CEProcedencia, Alumno.frm_eparvularia, Alumno.frm_Direccion,
                                                             Alumno.frm_DepartamentoID, Alumno.frm_Municipio, Alumno.frm_Telefono,
                                                             Alumno.frm_Celular, Alumno.frm_CorreoE, Alumno.frm_NMiembros, Alumno.frm_trabaja,
                                                             Alumno.frm_thijos, Alumno.frm_EnfermedadesPadece, Alumno.frm_MedicamentoPermanente).SingleOrDefault
                    If var IsNot Nothing Then Return var Else Return -1
                End Using
            Catch ex As EntityCommandExecutionException
                Throw New ApplicationException(String.Format("Ocurrió un error al intentar guardar los datos en el sistema. {0}", ex.Message), ex)
            Catch ex As Exception
                Throw New ApplicationException(String.Format("Ocurrió un error inesperado en la operación de guardar la nueva solicitud de matricula, esto puede deberse a la saturación por parte del servidor. Por favor, espere un momento y vuelva a intentarlo. {0}", ex.Message), ex)
            End Try
        End Function

        Private Function GetInfoSolicitud(NIE As String) As MATRICULA_SOLICITUDES Implements IMatricula.GetInfoSolicitud
            Try
                Using cnn As New SchoolClickEntities
                    Return cnn.MATRICULA_SOLICITUDES.Where(Function(m) m.NIE = NIE).SingleOrDefault
                End Using
            Catch ex As EntityCommandExecutionException
                Throw New ApplicationException(String.Format("Ocurrió un error al intentar recuperar la informacion de una solicitud de nuevo ingreso con No. NIE {1}. {0}", ex.InnerException.Message, NIE), ex)
            Catch ex As Exception
                Throw New ApplicationException(String.Format("Ocurrió un error inesperado en la operación. {0}", ex.Message), ex)
            End Try
        End Function
    End Class
End Namespace
